﻿/*********************************************************
 * 开发人员：小兵
 * 创建时间：2012-8-30 14:11:52
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/
namespace Mozlite.Components
{
    using System;
    using System.Web;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;

    /// <summary>
    /// 存储文件类。
    /// </summary>
    public class StorageFile
    {
        /// <summary>
        /// 物理存储唯一ID。
        /// </summary>
        public Guid StorageID { get; set; }
        /// <summary>
        /// 文件MD5值。
        /// </summary>
        public string MD5 { get; set; }
        /// <summary>
        /// 文档类型。
        /// </summary>
        public string ContentType { get; set; }
        /// <summary>
        /// 内容大小。
        /// </summary>
        public long ContentLength { get; set; }
        /// <summary>
        /// 文件物理路径。
        /// </summary>
        public string Path
        {
            get
            {
                return FileStorages.GetUserFilePath(MD5[0], MD5[1], MD5[2], MD5[3], MD5[4], MD5[5], MD5 + ".config");
            }
        }
        /// <summary>
        /// 返回文件流，如果不存在返回null。
        /// </summary>
        /// <returns>返回文件流。</returns>
        public Stream OpenRead()
        {
            if (File.Exists(Path))
                return File.OpenRead(Path);
            return null;
        }
        /// <summary>
        /// 保存到数据库中。
        /// </summary>
        internal void Save()
        {
            var storageID = Database.ExecuteScalar<Guid>("SELECT StorageID FROM moz_FileStorages WHERE MD5 = @MD5;", new { MD5 = this.MD5 });
            if (storageID == Guid.Empty)
                this.StorageID = storageID;
            else
            {
                this.StorageID = Guid.NewGuid();
                Database.ExecuteNonQuery(@"INSERT INTO moz_FileStorages(StorageID,MD5,ContentType,ContentLength)VALUES(@StorageID,@MD5,@ContentType,@ContentLength);", new
                {
                    StorageID = this.StorageID,
                    MD5 = this.MD5,
                    ContentType = this.ContentType,
                    ContentLength = this.ContentLength
                });
            }
        }
        /// <summary>
        /// 判断物理文件是否存在。
        /// </summary>
        /// <returns>返回判断结果。</returns>
        public bool IsExists()
        {
            return System.IO.File.Exists(Path);
        }
    }
}
